|
|
1. Формат GIF. Применение и возможности |
|
|
2. Стандарты GIF87a и GIF89a. Особенности и характеристики |
|
|
4. Создание анимаций |
|
|
5. Оптимизация анимированных GIF-файлов |
Общая схема следования этих блоков приблизительно такова:
| Название | Длина (в байтах) | Содержимое файла | Примечание |
|---|---|---|---|
| Заголовок файла | |||
| Признак GIF | 3 | 47 49 46 | GIF |
| Номер версии | 3 | 38 37 61 | 87a |
| Ширина экрана | 2 | 0320 | 800 |
| Высота экрана | 2 | 02 58 | 600 |
| Информация о цвете | 1 | Р7 | число цветов и прочее |
| Фон | 1 | 00 | |
| 0 | 1 | 00 | |
| Глобальная 256- цветная палитра | 3 * число цветов | 5955 | палитра может отсутствовать |
| Изображение № 1 | |||
| Признак картинки | 1 | 2С | Символ- разделитель изображения (00101100-',') |
| Координаты картинки: | |||
| по оси Х | 2 | 0000 | 0 |
| по оси Y | 2 | 0000 | 0 |
| Ширина картинки | 2 | 0320 | 800 |
| Высота картинки | 2 | 02 58 | 600 |
| Спец. информация | 2 | 08 07 | наличие палитр и прочее |
| Палитра картинки 256-цветная палитра | 3 * число цветов | палитра может отсутствовать | |
| Данные картинки | переменная | ||
| Изображение № 2 | |||
| … | |||
| Терминатор | 1 | 3B | обязателен (00111011 - ';') |
Дескриптор экрана описывает общие параметры для всех
последующих изображений в формате GIF. Он определяет размеры пространства изображения или
требуемого логического экрана, существование информации о таблице цветов и "глубине" экрана.
Пятый байт дескриптора экрана (Информация о цвете) имеет следующую структуру:
|
M = , за дескриптором следует глобальная таблица цветов cr + 1 = число битов цветового разрешения pixel+1 = число бит/пиксель в изображении |
| Фон - цветовой индекс фона экрана (из глобальной таблицы цветов или из таблицы по умолчанию) |
Значение 'pixel' определяет число цветов в изображении. Диапазон значений 'pixel' составляет от 0 до 7 (1-8 бит). Это транслируется в диапазон от 2 (черно-белые изображения) до 256 цветов. Бит 3 в байте 5 зарезервирован (должен быть нулевым).
Глобальная таблица цветов является необязательной и
рекомендуется для изображений, где требуется точная передача цветов. На существование этой
таблицы указывает поле 'M' в байте 5 дескриптора экрана. Цветовая таблица может быть также
связана с каждым изображением в GIF-файле. Флаг 'M' в дескрипторе конкретного изображения обычно
равен 0. Если глобальная таблица цветов присутствует, ее определение следует непосредственно за
дескриптором экрана. Каждый элемент цветовой таблицы состоит из трех байтов, значения которых
описывают соответственно относительную интенсивность красного, зеленого и синего цветов.
Структура блока цветовой таблицы:
|
Получаемое значение каждого пикселя при высвечивании изображения будет соответствовать ближайшему доступному цвету из цветовой таблицы дисплея. Цветовые компоненты представляют собой значение относительной интенсивности от нулевой (0) до полной (255). Белый цвет - (255,255,255), черный - (0,0,0). |
Дескриптор изображения определяет действительное
расположение и размеры последующего изображения внутри пространства, определенного в дескрипторе
экрана. Также определяются флаги, указывающие на присутствие локальной палитры цветов и
определения последовательности высвечивания пикселей. Каждый дескриптор изображения начинается с
символа-разделителя изображений (определен как шестнадцатеричное 0x2C или ','). Как только этот
символ встречается между изображениями, непосредственно за ним следует дескриптор изображения.
Символ, расположенные между концом предыдущего изображения и символом-разделителем изображения
игнорируется.
Десятый байт дескриптора изображения имеет следующую структуру:
|
M = 0 использовать глобальную таблицу цветов, игнорировать 'pixel' M = 1 далее следует локальная таблица цветов, использовать 'pixel' I = 0 изображение отформатировано в последовательном порядке I = 1 изображение отформатировано в порядке переплетения pixel+1 = число бит/пиксель в данном изображении |
| Описание положения и размеров экрана должно быть находиться внутри матрицы, определенной в дескрипторе экрана. Нет необходимости, чтобы изображение полностью заполняло весь экран. |
Локальная таблица цветов необязательна. Если
установлен бит 'M' байта 10 в дескрипторе изображения, то вслед за дескриптором изображения
следует локальная таблица цветов, которая относится только к последующему изображению. Поле
'pixel' байта 10 в дескрипторе изображения используется если указана локальная таблица цветов.
Она определяет не только размер пикселя (число битов в нем), но число элементов последующей
цветовой таблицы.
Формат самого изображения определен как серия
значений номеров пикселей, которые образуют изображение. Пиксели запоминаются слева направо
последовательно по строкам изображения. По умолчанию строки записываются последовательно, сверху
вниз. В том случае, если установлен бит 'I' в байте 10 дескриптора изображения, то порядок строк
при записи изображения соответствует четырех проходному процессу. При первом проходе записывается
каждая 8-ая строка, начиная с верхней строки окна изображения. При втором проходе записывается
каждая 8-ая строка, начиная с пятой строки сверху. На третьем проходе записывается каждая 4-ая
строка, начиная с третьей строки окна. Четвертый проход завершает изображение, записывая каждую
вторую строку, начиная со второй строки с сверху. Ниже приведено графическое описание этого
процесса.
Значения пикселей изображения обрабатываются как цветовые индексы, указывающие на существующую
таблицу цветов. В результате получается цветовое значение из таблицы, которое реально
воспроизводится на экране. Эти серии цветовых индексов, число которых равно
ширине_изображения*высоту_изображения, пропускаются через поток данных изображения GIF по одному
значению на пиксель, сжимаются и упаковываются в соответствии с версией алгоритма сжатия LZW.
Терминатор GIF. Для того, чтобы обеспечить
синхронизацию с окончанием файла изображения GIF, декодер GIF должен обрабатывать окончание
режима GIF по символу шестнадцатеричное 0x3B или ';', найденному после окончания обработки
изображения.
Блоки управления расширением
Их четыре типа:
| Название | Длина (в байтах) | Содержимое файла | Примечание |
|---|---|---|---|
| Признак блока | 1 | 21 | "!" - идентификатор расширенного блока |
| Признак расширения | 1 | 01 | текст |
| Размер блока | 1 | 0C | всегда |
| Позиция текста по оси Х | 2 | 00 14 | 20 |
| Позиция текста по оси Y | 2 | в пикселях 00 ОА | 10 |
| Ширина текста по оси Х | 2 | 00 38 | 56 |
| Ширина текста по оси Y | 2 | 00 0A | в пикселях 10 |
| Ширина буквы | 1 | 08 | 8 |
| Высота буквы | 1 | 0A | 10 |
| Цвет фона | 1 | 07 | из палитры |
| Цвет буквы | 1 | 01 | |
| Текст | от 1 до 255 | 8F 90 88 82 ... | ПРИВЕТ! |
| Признак конца блока | 1 | 00 | терминатор (всегда) |
| Байт | Значение/Содержание | Описание |
|---|---|---|
| 1 | 21h | "!" - идентификатор расширенного блока |
| 2 | Функциональный код | Расширенный функциональный код (0-255) |
| 3 | Байт-счетчик | Повторяется столько раз, сколько необходимо |
| 4 | Функ. байты данных | |
| ... | ... | ... |
| n | 0 | Нулевой байт-счетчик (терминатор блока) |
Image Tools Group 2004г.